﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BAL;
using DAL.Entities;

namespace GrouponDesktop.AbmRol
{
    public partial class AgregarOEditarRol : Form
    {
        private int IdRol { set; get; }

        private List<FuncionalidadEntity> listado = new List<FuncionalidadEntity>();

        public AgregarOEditarRol(int intIdRol)
        {
            IdRol = intIdRol;
            InitializeComponent();
            if(intIdRol == 0){
                this.Name = "Agregar Rol";
            }else{
                this.Name = "Editar Rol";
            }
            //Obtenemos las funcionalidades
            FuncionalidadBAL proxy = new FuncionalidadBAL();
            listado = proxy.GetFuncionalidades();

            
            List<FuncionalidadEntity> listFunc = new List<FuncionalidadEntity>();
            //Si es un editar buscamos los datos
            if (IdRol != 0)
            {
                RolEntity rolInfo = new RolEntity();
                rolInfo.IntIdRol = IdRol;
                RolBAL rolProxy = new RolBAL();
                rolInfo = rolProxy.GetRolById(rolInfo);

                txtRol.Text = rolInfo.VarNombre;

                listFunc = proxy.GetFuncionalidadesByRol(rolInfo);

            }

            this.SuspendLayout();

            int topPosition = 0;
            //Agregamos todos los checkbox
            foreach (FuncionalidadEntity item in listado)
            {
                CheckBox checkBox = new CheckBox();

                checkBox.Top = topPosition;
                checkBox.Left = 10;
                checkBox.Text = item.IntIdFuncionalidad+" "+item.VarEtiqueta;
                checkBox.Width = 200;

                topPosition += 20;
                if (IdRol != 0)
                {
                    //Nos fijamos si esta chequeado
                    //listFunc.Find();
                    var res = listFunc.Find(s => s.IntIdFuncionalidad == item.IntIdFuncionalidad); 

                    if(res != null){
                        checkBox.Checked = true;
                    }
                    res = null;
                }
                this.panel1.Controls.Add(checkBox);
            }


            this.ResumeLayout();
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            lblError.Text = string.Empty;
            if (txtRol.Text != string.Empty)
            {
                RolBAL proxy = new RolBAL();
                FuncionalidadBAL proxyFun = new FuncionalidadBAL();
                
                

                RolEntity rol = new RolEntity();
                rol.VarNombre = txtRol.Text;
                if (IdRol == 0)
                {
                    rol = proxy.AddRol(rol);
                    proxyFun.DeleteFuncionalidadesFromRol(rol);
                    //Agregamos las funcionaldiades
                    foreach (CheckBox item in panel1.Controls)
                    {
                        if (item.Checked == true)
                        {
                            FuncionalidadEntity func = new FuncionalidadEntity();
                            string[] parts = item.Text.Split(' ');
                            func.IntIdFuncionalidad = Int32.Parse(parts[0]);
                            proxyFun.AddFuncionalidadesToRol(rol, func);
                        }
                    }

                }
                else
                {
                    rol.IntIdRol = IdRol;
                    proxy.UpdateRol(rol);
                    proxyFun.DeleteFuncionalidadesFromRol(rol);
                    //Agregamos las funcionaldiades
                    foreach (CheckBox item in panel1.Controls)
                    {
                        if (item.Checked == true)
                        {
                            FuncionalidadEntity func = new FuncionalidadEntity();
                            string[] parts = item.Text.Split(' ');
                            func.IntIdFuncionalidad = Int32.Parse(parts[0]);
                            proxyFun.AddFuncionalidadesToRol(rol,func);
                        }
                    }
                }

                this.Close();
            }
            else {
                lblError.Text = "El nombre no puede estar vacio.";
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
